/**
  * @addtogroup 
  * 
  *
  * @brief 
  *
  * @code{c}
  * @endcode
  * @{
  * @file         bsc_electric_fence.h
  * @brief        
  * @note
  * @author       Jpz(puzhao.jin@hopechart，靳普诏)
  * @date         2022-09-22
  * @version      1.0
  * 
  * @par          修改日志
  * <table>
  * <tr><th>Date        <th>Version          <th>Author                        <th>Description
  * <tr><td>2022-09-22  <td>1.0              <td>Jpz                           <td>创建初始版本
  * @copyright    杭州鸿泉物联网技术股份有限公司
  */



#ifndef _BSC_ELECTRIC_FENCE_H_
#define _BSC_ELECTRIC_FENCE_H_

#include "bsc_electric_fence/bsc_electric_fence_define.h"
#include "bsc_electric_fence/bsc_electric_fence_tool_if.h"
#include "bsc_electric_fence/bsc_electric_fence_channel.h"


#ifdef __cplusplus
extern "C" {
#endif


/**
 * 初始化电子围栏组件
 * @param tool_if 工具接口集，由用户完成具体实现
 * @return True   成功；
 *         False  失败
 * @note 单实例初始化TBsElectircFenceObject对象,
 *       内部调用BsElectricFenceCfgChannelsCreate()传出通道列表并注册
 */
Bool BsElectricFenceInit(IBsElectricFenceToolIf *tool_if);

/**
 * 去初始化
 * @return 
 */
void BsElectricFenceDone(void);

/**
 * 电子围栏处理  
 * @return 
 */
void BsElectricFenceRunOnce(void);



/**
 * 组件内部位置信息滤波器 
 * @param flag 是否打开，True 打开，False 关闭。（默认 False）
 * @return 
 */
void BsElectricFenceSetStatusFilter(Bool flag);


/**
 * 组件内部日志输出接口  
 * @param *data 输出信息
 * @return 输出字符长
 */
Int32 BsElectricFenceLog(const Byte *data, ...);

#ifndef BEFLog
#define BEFLog(fmt, ...) BsElectricFenceLog((const Byte *)fmt, ##__VA_ARGS__)
#endif





/**
 * 获取通道数量
 * @return 通道数量
 */
Int32 BsElectricFenceChannelCount(void);


/**
 * 获取通道句柄
 * @param id  通道id（@ref TBsElectricFenceCfgChannelId）
 * @return 成功，通道句柄
 *         失败，NULL
 */
TBsElectricFenceChannel *BsElectricFenceGetChannelHandler(UInt32 id);


#ifdef __cplusplus
}  ///< extern "C" {
#endif


#endif

